package br.com.pguide.activity;

import java.util.ArrayList;

import br.com.pguide.R;
import br.com.pguide.estrutura.Preferencias;
import br.com.pguide.parser.Parser;
import br.com.pguide.utils.Mensagem;
import br.com.pguide.webservice.WebService;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.RatingBar;
import android.widget.SeekBar;
import android.widget.TextView;

public class PreferenciasActivity extends Activity {

	String username;
	public static ListView lv;
	public static boolean[] checkedItens;
	public static String[] formas_str;
	public static ArrayList<String> formas;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		Intent it = getIntent();
		username = it.getStringExtra("username");
		setContent();
	}
	
	public void setContent() {
		setContentView(R.layout.preferencias_usuario);

		// um dia eu tiro isso da interface...
		((TextView) findViewById(R.id.TextView02)).setText(R.string.reputacao);
		
		ArrayList<View> array = new ArrayList<View>();
		array.add((TextView) findViewById(R.id.textView2));
		array.add((TextView) findViewById(R.id.textView3));
		array.add((TextView) findViewById(R.id.TextView04));
		array.add((TextView) findViewById(R.id.TextView05));
		array.add((RatingBar) findViewById(R.id._reputacao));

		array.add((EditText) findViewById(R.id._preco_minimo));
		array.add((EditText) findViewById(R.id._preco_maximo));
		array.add((EditText) findViewById(R.id._proximidade_minimo));
		array.add((EditText) findViewById(R.id._proximidade_maximo));
		for (int i=0;i<array.size(); i++) {
			array.get(i).setVisibility(View.GONE);
		}
		// fim 
		
		lv = (ListView) findViewById(R.id._formas_de_pagamento);
		formas = new ArrayList<String>(Parser.get_formas_de_pagamento(WebService.get_formas_de_pagamento(username), this));
		formas_str = new String[formas.size()];
		checkedItens = new boolean[formas.size()];
		for (int i=0; i<formas.size(); i++) {
			formas_str[i] = formas.get(i);
			checkedItens[i] = false;
		}
		lv.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, formas_str));
		lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
		
		lv.setOnItemClickListener(new OnItemClickListener() {
			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
					long arg3) {
				editarFormasDePagamento();
			}
		});
		
		setDataOnForm();
	}
	
	public void setDataOnForm() {
		try {
			Preferencias prefs = Parser.get_preferencias(WebService.get_preferencias(username), this);
			EditText editText = (EditText) findViewById(R.id._preco_minimo);
			editText.setText(String.valueOf(prefs.getMinPrecoItem()));
			
			editText = (EditText) findViewById(R.id._preco_maximo);
			editText.setText(String.valueOf(prefs.getMaxPrecoItem()));
			
			editText = (EditText) findViewById(R.id._proximidade_minimo);
			editText.setText(String.valueOf(prefs.getMinDistanciaItem()));
			
			editText = (EditText) findViewById(R.id._proximidade_maximo);
			editText.setText(String.valueOf(prefs.getMaxDistanciaItem()));
			
			RatingBar ratbar = (RatingBar) findViewById(R.id._reputacao);
			ratbar.setRating(new Float(prefs.getMinReputacaoItem()+""));
			Log.i("REPUTACAO", "ratbar="+ratbar.getRating() + "/prefs=" + prefs.getMinReputacaoItem());
		} catch (Exception e) {
			Mensagem.exibirMensagem(e.getMessage(), this);
			Log.i("erro >>>>>", e.getMessage());
		}
	}
	
	public void editarFormasDePagamento() {
		AlertDialog.Builder dialog = new AlertDialog.Builder(this);
		final ListView lv1 = new ListView(this);
		lv1.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, formas_str));
		lv1.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
		lv1.setOnItemClickListener(new OnItemClickListener() {
			
			public void onItemClick(AdapterView<?> arg0, View arg1, int position,
					long arg3) {
				if (checkedItens[position]) {
					checkedItens[position] = false;
				} else {
					checkedItens[position] = true;
				}
			}
		});
		dialog.setTitle(R.string.condicoes_de_pagamento);
		dialog.setView(lv1);
		dialog.setNegativeButton(R.string.salvar, null);
		dialog.show();
	}
	
	public void salvar(View view) {
		int[] campos = new int[]{R.id._preco_minimo, R.id._preco_maximo, R.id._proximidade_minimo, R.id._proximidade_maximo};
		for (int campo: campos) {
			EditText text = (EditText) findViewById(campo);
			if (text.getText().length()==0) {
				Mensagem.exibirMensagem(getString(R.string.campos_nao_preenchidos), this);
				return;
			}
		}
		
		EditText editText = (EditText) findViewById(R.id._preco_minimo);
		double minPreco = Double.valueOf(editText.getText().toString());
		editText = (EditText) findViewById(R.id._preco_maximo);
		double maxPreco = Double.valueOf(editText.getText().toString());
		editText = (EditText) findViewById(R.id._proximidade_minimo);
		double minDistancia = Double.valueOf(editText.getText().toString());
		editText = (EditText) findViewById(R.id._proximidade_maximo);
		double maxDistancia = Double.valueOf(editText.getText().toString());
		RatingBar ratbar = (RatingBar) findViewById(R.id._reputacao);
		double minReputacao = ratbar.getRating();
		SeekBar skb_ir = (SeekBar) findViewById(R.id.irpreco);
		double ir_preco = skb_ir.getProgress();
		skb_ir = (SeekBar) findViewById(R.id.irproximidade);
		double ir_proximidade = skb_ir.getProgress();
		skb_ir = (SeekBar) findViewById(R.id.irreputacao);
		double ir_reputacao = skb_ir.getProgress();
		
		
		String results = "";
		try {
			String formas_ = "[";
			for (int i=0; i<checkedItens.length; i++) {
				if (checkedItens[i]){ 
					if (formas_.length()>1) formas_ += ",";
					formas_ += i;
				}
				if (i==checkedItens.length-1){
					formas_ += "]";
				}
			}
			results = WebService.cadastrar_preferencias(minPreco, maxPreco, 
								minDistancia, maxDistancia, 
								minReputacao, formas_, 
								ir_preco, ir_proximidade, ir_reputacao, username);

			
			if (results.equals("ok")) {
				Mensagem.exibirMensagem(getString(R.string.preferencias_sucesso), this);
			} else {
				Mensagem.exibirMensagem(getString(R.string.preferencias_erro), this);
			}
		} catch (Exception e) {
			Log.i("erro >>> ", e.getMessage() + " //// " + e.getLocalizedMessage());
		}
	}
	
}
